package com.hsnn.medstgmini.base.std.service.impl;

import java.io.OutputStream;
import java.util.List;
import java.util.Map;

import javax.transaction.Transactional;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.hsnn.medstgmini.base.std.dao.StdProdDrugInfoDao;
import com.hsnn.medstgmini.base.std.model.form.StdProdDrugInfoForm;
import com.hsnn.medstgmini.base.std.service.StdProdDrugInfoManager;
import com.hsnn.medstgmini.sys.model.SysUser;
import com.hsnn.medstgmini.util.Pagination;

/**
 * @category 企业产品库管理
 * @author 蔡春龙
 * @date 2015年8月18日
 */
@Service
public class StdProdDrugInfoManagerImpl implements StdProdDrugInfoManager {

	@Autowired
	private StdProdDrugInfoDao stdProdDrugInfoDao;

	/**
	 * @category 分页查询企业产品列表
	 * @date 2015年8月18日
	 * @param form
	 * @return
	 */
	public Pagination getStdProdDrugInfoList(Pagination page) {
		return stdProdDrugInfoDao.getStdProdDrugInfoList(page);
	}
	
	/**
	 * @category 分页查询企业产品列表
	 * @date 2015年8月18日
	 * @param form
	 * @return
	 */
	public Pagination getMergeProdDrugInfoList(Pagination page) {
		return stdProdDrugInfoDao.getMergeProdDrugInfoList(page);
	}

	/**
	 * @category 根据id查询企业产品详情
	 * @date 2015年8月18日
	 * @param prodId
	 * @return
	 */
	public Map<String, Object> getStdProdDrugInfoDetail(String prodId) {
		return stdProdDrugInfoDao.getStdProdDrugInfoDetail(prodId);
	}
	
	/**
	 * @category 根据药品code查询企业产品详情
	 * @date 2015年8月18日
	 * @param prodCode
	 * @return
	 */
	public Map<String, Object> getDrugInfoByCode(String drugCode) {
		return stdProdDrugInfoDao.getDrugInfoByCode(drugCode);
	}

	/**
	 * @category 变更状态
	 * @date 2015年8月18日
	 * @param list
	 * @param status
	 */
	@Transactional
	public int changeStatus(List<StdProdDrugInfoForm> list, Integer status,
			SysUser user) {
		return stdProdDrugInfoDao.changeStatus(list, status, user);
	}

	/**
	 * @category 分页查询企业产品日志列表
	 * @date 2015年8月18日
	 * @param form
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public Pagination getStdProdDrugInfoLogList(Pagination page) {
		List<Map<String,Object>> list = (List<Map<String, Object>>) stdProdDrugInfoDao.getStdProdDrugInfoLogList(page).getRows();
		
		for(int i = 0;i<list.size();i++){
			String detail = list.get(i).get("detail")==null?"":list.get(i).get("detail").toString();
			if(StringUtils.isNotBlank(detail)){
				if(detail.toString().indexOf(",")<0){
					detail = "新增数据:<br/>".concat(detail.replaceAll(";", "<br/>"));
					
				}else{
					detail= detail.replaceAll(":", "由");
					detail= detail.replaceAll(",", "变为");
					detail= detail.replaceAll(";", "<br/>");
				}
			}
			list.get(i).put("detail", detail);
		}
		page.setRows(list);
		return page;
	}

	/**
	 * @category 根据id查询企业产品 日志详情
	 * @date 2015年8月18日
	 * @param prodId
	 * @return
	 */
	public List<Map<String, Object>> getStdProdDrugInfoLogDetail(String logId) {
		return stdProdDrugInfoDao.getStdProdDrugInfoLogDetail(logId);
	}

	/**
	 * @category 保存企业产品库
	 * @date 2015年8月19日
	 * @param form
	 * @param user
	 */
	@Transactional
	public void saveProdDrugInfo(StdProdDrugInfoForm form, SysUser user) {
		stdProdDrugInfoDao.saveProdDrugInfo(form, user);
	}

	/**
	 * 
	 * @category 分页查询品规列表，用于新增通用名、通用名英文、剂型、规格
	 * @author 言科
	 * @date 2015年8月19日 Pagination
	 */
	public Pagination getSelectQualityspec(Pagination page) {
		return stdProdDrugInfoDao.getSelectQualityspec(page);
	}

	/**
	 * 
	 * @category 分页查询药理分类列表
	 * @author 言科
	 * @date 2015年8月19日
	 */
	public Pagination getSelectPhar(Pagination page) {
		return stdProdDrugInfoDao.getSelectPhar(page);
	}

	/**
	 * 
	 * @category 分页查询生产企业列表
	 * @author 言科
	 * @date 2015年8月19日
	 */
	public Pagination getSelectProdComp(Pagination page) {
		return stdProdDrugInfoDao.getSelectProdComp(page);
	}

	/**
	 * 
	 * @category 分页查询材质列表
	 * @author 言科
	 * @date 2015年8月19日
	 */
	public Pagination getSelectMaterial(Pagination page) {
		return stdProdDrugInfoDao.getSelectMaterial(page);
	}

	/**
	 * 
	 * @category 分页查询包装单位列表
	 * @author 言科
	 * @date 2015年8月19日
	 */
	public Pagination getSelectUnit(Pagination page) {
		return stdProdDrugInfoDao.getSelectUnit(page);
	}

	/**
	 * @category 保存合并
	 * @date 2015年8月21日
	 * @param mergerProdId
	 * @param mergedProdIdList
	 */
	@Transactional
	public void saveMergeDrugInfo(String mergerProdId,
			List<StdProdDrugInfoForm> mergedProdIdList, SysUser user) {
		stdProdDrugInfoDao.saveMergeDrugInfo(mergerProdId, mergedProdIdList,
				user);
	}
	
	/**
	 * @category 查询当前产品被谁合并
	 * @date 2015年8月24日
	 * @param form
	 * @param page
	 * @return
	 */
	public Pagination getMergerProdDrugInfoLog(Pagination page) {
		return stdProdDrugInfoDao.getMergerProdDrugInfoLog(page);
	}
	
	/**
	 * @category 查询当前产品合并了哪些产品
	 * @date 2015年8月24日
	 * @param form
	 * @param page
	 * @return
	 */
	public Pagination getMergedProdDrugInfoLogList(Pagination page) {
		return stdProdDrugInfoDao.getMergedProdDrugInfoLogList(page);
	}
	
	/**
	 * @category 分页查询待审核的企业产品列表
	 * @date 2015年8月18日
	 * @param form
	 * @return
	 */
	public Pagination getAuditCompDrugList(Pagination page) {
		return stdProdDrugInfoDao.getAuditCompDrugList(page);
	}
	
	/**
	 * @category 审核企业产品
	 * @date 2015年9月11日
	 * @param form
	 * @param user
	 */
	@Transactional
	public void auditCompDrug(StdProdDrugInfoForm form, SysUser user) {
		stdProdDrugInfoDao.auditCompDrug(form, user);
	}
	public void exportExcel(Pagination page,OutputStream os){
		stdProdDrugInfoDao.exportExcel(page,os);
	
	}
}
